// 原子隐藏/显示功能测试脚本
console.log('原子隐藏/显示功能测试')

// 模拟测试数据
const testStructure = {
  material_id: 'mp-20411',
  sites: [
    { species: ['Si'], xyz: [0.0, 0.0, 0.0], label: 'Si1' },
    { species: ['Si'], xyz: [0.25, 0.25, 0.25], label: 'Si2' },
    { species: ['O'], xyz: [0.5, 0.5, 0.5], label: 'O1' },
    { species: ['O'], xyz: [0.75, 0.75, 0.75], label: 'O2' }
  ],
  lattice: {
    a: 5.43,
    b: 5.43,
    c: 5.43,
    alpha: 90,
    beta: 90,
    gamma: 90
  }
}

// 模拟隐藏元素集合
const hiddenElements = new Set()

// 模拟 toggleElementVisibility 函数
function toggleElementVisibility (element) {
  console.log(`切换元素 ${element} 的可见性`)

  if (hiddenElements.has(element)) {
    // 显示元素
    hiddenElements.delete(element)
    console.log(`显示元素 ${element}`)

    // 重新创建该元素的原子
    const atomsAdded = recreateAtomsForElement(element, testStructure)
    console.log(`添加了 ${atomsAdded} 个 ${element} 原子`)
  } else {
    // 隐藏元素
    hiddenElements.add(element)
    console.log(`隐藏元素 ${element}`)

    // 移除该元素的原子
    const atomsRemoved = removeAtomsForElement(element)
    console.log(`移除了 ${atomsRemoved} 个 ${element} 原子`)
  }

  console.log('当前隐藏的元素:', Array.from(hiddenElements))
}

// 模拟重新创建原子
function recreateAtomsForElement (element, structure) {
  let atomsAdded = 0
  const lattice = structure.lattice

  structure.sites.forEach(atom => {
    let elementSymbol = ''

    if (atom.species && atom.species.length > 0) {
      elementSymbol = atom.species[0]
    } else if (atom.label) {
      elementSymbol = atom.label.replace(/[0-9+-]/g, '')
    }

    if (elementSymbol === element) {
      // 计算原子位置
      const x = (atom.xyz[0] - 0.5) * lattice.a
      const y = (atom.xyz[1] - 0.5) * lattice.b
      const z = (atom.xyz[2] - 0.5) * lattice.c

      console.log(`创建 ${element} 原子在位置 (${x.toFixed(2)}, ${y.toFixed(2)}, ${z.toFixed(2)})`)
      atomsAdded++
    }
  })

  return atomsAdded
}

// 模拟移除原子
function removeAtomsForElement (element) {
  // 这里模拟移除操作，实际代码中会从场景中移除网格对象
  console.log(`移除所有 ${element} 原子`)
  return 2; // 假设每个元素有2个原子
}

// 测试用例
console.log('=== 测试开始 ===')

// 测试1: 隐藏硅原子
console.log('\n测试1: 隐藏硅原子')
toggleElementVisibility('Si')

// 测试2: 再次点击硅原子（应该显示）
console.log('\n测试2: 再次点击硅原子（应该显示）')
toggleElementVisibility('Si')

// 测试3: 隐藏氧原子
console.log('\n测试3: 隐藏氧原子')
toggleElementVisibility('O')

// 测试4: 再次点击氧原子（应该显示）
console.log('\n测试4: 再次点击氧原子（应该显示）')
toggleElementVisibility('O')

// 测试5: 隐藏不存在的元素
console.log('\n测试5: 隐藏不存在的元素')
toggleElementVisibility('C')

console.log('\n=== 测试完成 ===')
console.log('最终隐藏的元素:', Array.from(hiddenElements))
